//
// Created by 马皓然 on 2025/10/28.
//

#ifndef XIAOM_CAN_DRIVER_H
#define XIAOM_CAN_DRIVER_H

#include "stm32f4xx_hal.h"
#include "FreeRTOS.h"
#include "can.h"
#include "queue.h"
#include "semphr.h"
#include <stdint.h>
#include <stdbool.h>

/* Definitions ---------------------------------------------------------------*/

// 接收队列大小，决定能缓存多少帧数据。
// FreeRTOS Queue 存储的是指向 CAN_Frame_t 结构体的指针。
#define CAN_RX_QUEUE_SIZE 32

/* Structs -------------------------------------------------------------------*/
/**
 * @brief  CAN 帧数据结构体
 */
typedef struct
{
    CAN_RxHeaderTypeDef rx_header; // CAN报文头（包含ID、帧类型、DLC等）
    uint8_t rx_data[8];            // CAN报文数据（8字节）
} CAN_RxFrame_t;

/* Global Variables ----------------------------------------------------------*/

extern QueueHandle_t xCanRxQueue;     /**< CAN 接收队列句柄 */

/* Functions -----------------------------------------------------------------*/


#endif //XIAOM_CAN_DRIVER_H